package com.kty.utils;

import cn.hutool.core.date.DateUtil;
import com.kty.entity.GregorianDate;

/**
 * 用于 公历（年、月、日、时）格式判断
 */
public class JiaoYan {

    private static final GregorianDate gl = new GregorianDate();

//**********************************************************************************************************************

    /**
     * 年份格式判断
     */
    public static int year() {

        int year = 0;
        try {
            for (; ; ) {
                System.out.print("\n*请输入年：");
                year = Method.readInt(4); // 从键盘读取一个长度不超过4位的整数

                // 最大支持计算至2050年
                if(year > 2050){
                    System.out.println("不支持计算第" + year + "年！");
                    continue;
                }

                // 年份位数
                int yearLength = String.valueOf(year).length();

                //输入-1退出程序
//                Method.Out(year);

                if (year < 0 || yearLength != 4) {
                    System.out.println("输入的年份位数（" + yearLength + "）错误，需要4位");
                } else break;

            }
        } catch (Exception e) {
            System.out.println("数字非法！");
            System.exit(1);
        }
        gl.setYear(year);
        return year;

    }

//----------------------------------------------------------------------------------------------------------------------

    /**
     * 月份格式判断
     */
    public static int month() {

        int month = 0;
        try {
            for (; ; ) {
                System.out.print("*请输入月：");
                month = Method.readInt(2); // 月

                //输入-1退出程序
//                Method.Out(month);

                if (month <= 0 || month > 12) {
                    System.out.println("月份错误，请重新输入！");
                } else break;
            }
        } catch (Exception e) {
            System.out.println("数字非法！");
            System.exit(1);
        }
        gl.setMonth(month);
        return month;

    }

//----------------------------------------------------------------------------------------------------------------------

    /**
     * 天数格式判断
     */
    public static int day() {

        int year = gl.getYear();

        int day = 0;
        try {
            A:
            for (; ; ) {
                System.out.print("*请输入日：");
                day = Method.readInt(2); // 日

                //输入-1退出程序
//                Method.Out(day);

                switch (gl.getMonth()) {
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                    case 8:
                    case 10:
                    case 12:
                        if (day < 0 || day > 31) {
                            System.out.println("天数错误，请重新输入！");
                            break;
                        } else break A;
                    case 2:
                        // 判断是否为闰年
                        if (DateUtil.isLeapYear(year)) {
                            if (day < 0 || day > 29) {
                                //闰年：2月共29天
                                System.out.println("$-> " + year + "年为闰年，天数错误，请重新输入！\n");
                                continue;
                            }
                        } else {
                            if (day < 0 || day > 28) {
                                //平年：2月共28天
                                System.out.println("$-> " + year + "年为平年，天数错误，请重新输入！\n");
                                continue;
                            }
                        }
                        break A;
                    case 4:
                    case 6:
                    case 9:
                    case 11:
                        if (day < 0 || day > 30) {
                            System.out.println("天数错误，请重新输入！");
                            break;
                        } else break A;
                }
            }
        } catch (Exception e) {
            System.out.println("数字非法！");
            System.exit(1);
        }
        gl.setDay(day);
        return day;

    }

//----------------------------------------------------------------------------------------------------------------------

    /**
     * 时间格式判断
     */
    public static int time() {

        int time = 0;
        try {
            for (; ; ) {
                System.out.print("*请输入时(时辰)：");
                time = Method.readInt(2); // 日

                //输入-1退出程序
//                Method.Out(time);

                if (time < 0 || time > 24) {
                    System.out.println("时间错误，请重新输入！");
                } else break;
            }
        } catch (Exception e) {
            System.out.println("数字非法！");
            System.exit(1);
        }
        gl.setTime(time);
        return time;

    }


}
